///*
// *  Copyright 2019-2020 Zheng Jie
// *
// *  Licensed under the Apache License, Version 2.0 (the "License");
// *  you may not use this file except in compliance with the License.
// *  You may obtain a copy of the License at
// *
// *  http://www.apache.org/licenses/LICENSE-2.0
// *
// *  Unless required by applicable law or agreed to in writing, software
// *  distributed under the License is distributed on an "AS IS" BASIS,
// *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// *  See the License for the specific language governing permissions and
// *  limitations under the License.
// */
//package com.yangxu.hospital.system.modules.system.websocket;
//
//import com.alibaba.fastjson.JSON;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.Objects;
//import java.util.concurrent.CopyOnWriteArraySet;
///**
// * @author Yangxu
// * @date 2024-12-21 22:27
// */
//@ServerEndpoint("/webSocket/{sid}")
//@Slf4j
//@Component
//public class WebSocketServer {
//
//	/**
//	 * concurrent包的线程安全Set，用来存放每个客户端对应的MyWebSocket对象。
//	 */
//	private static final CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
//
//	/**
//	 * 与某个客户端的连接会话，需要通过它来给客户端发送数据
//	 */
//	private Session session;
//
//	/**
//	 * 接收sid
//	 */
//	private String sid="";
//	/**
//	 * 连接建立成功调用的方法
//	 * */
//	@OnOpen
//	public void onOpen(Session session,@PathParam("sid") String sid) {
//		this.session = session;
//		//如果存在就先删除一个，防止重复推送消息
//		webSocketSet.removeIf(webSocket -> webSocket.sid.equals(sid));
//		webSocketSet.add(this);
//		this.sid=sid;
//	}
//
//	/**
//	 * 连接关闭调用的方法
//	 */
//	@OnClose
//	public void onClose() {
//		webSocketSet.remove(this);
//	}
//
//	/**
//	 * 收到客户端消息后调用的方法
//	 * @param message 客户端发送过来的消息*/
//	@OnMessage
//	public void onMessage(String message, Session session) {
//		log.info("收到来"+sid+"的信息:"+message);
//		//群发消息
//		for (WebSocketServer item : webSocketSet) {
//			try {
//				item.sendMessage(message);
//			} catch (IOException e) {
//				log.error(e.getMessage(),e);
//			}
//		}
//	}
//
//	@OnError
//	public void onError(Session session, Throwable error) {
//		log.error("发生错误");
//		error.printStackTrace();
//	}
//	/**
//	 * 实现服务器主动推送
//	 */
//	private void sendMessage(String message) throws IOException {
//		this.session.getBasicRemote().sendText(message);
//	}
//
//
//	/**
//	 * 群发自定义消息
//	 * */
//	public static void sendInfo(SocketMsg socketMsg,@PathParam("sid") String sid) throws IOException {
//		String message = JSON.toJSONString(socketMsg);
//		log.info("推送消息到"+sid+"，推送内容:"+message);
//		for (WebSocketServer item : webSocketSet) {
//			try {
//				//这里可以设定只推送给这个sid的，为null则全部推送
//				if(sid==null) {
//					item.sendMessage(message);
//				}else if(item.sid.equals(sid)){
//					item.sendMessage(message);
//				}
//			} catch (IOException ignored) { }
//		}
//	}
//
//	@Override
//	public boolean equals(Object o) {
//		if (this == o) {
//			return true;
//		}
//		if (o == null || getClass() != o.getClass()) {
//			return false;
//		}
//		WebSocketServer that = (WebSocketServer) o;
//		return Objects.equals(session, that.session) &&
//				Objects.equals(sid, that.sid);
//	}
//
//	@Override
//	public int hashCode() {
//		return Objects.hash(session, sid);
//	}
//}
